[Tutoriel] Désassembler des syscalls avec une seule main
Posté le 20/10/2016 11:29
Voici quelque chose que j'ai longtemps gardé en réserve, et rédigé ces derniers jours pour me détendre.
J'espère pouvoir vous faire découvrir avec ce tutoriel, l'intérêt du rétro-engineering et tout ce qu'on peut apprendre simplement en désassemblant des syscalls (rien que ça, enfin).
Ce tutoriel a été rédigé avec LaTeX et essaie d'être un peu exhaustif. Vous pouvez le télécharger en fichier joint au format PDF.
Désolé pour la référence au fxSDK, que vous ne pouvez manifestement pas encore utiliser parce que les outils ne sont pas réellement prêts. J'ai utilisé
fxos tout le long du tutoriel, et modifié un peu les informations qu'il a renvoyé en sortie (par exemple, quand il y a des octets de données qui peuvent s'interpréter comme des instructions,
fxos décode les instructions, mais j'ai retiré cette information qui ne ferait qu'embrouiller le lecteur). J'essaierai de vous fournir un outil simple à utiliser quand je le publierai.
Voilà, j'espère que cette technique de désassemblage pourra vous être utile
Fichier joint
Citer : Posté le 20/10/2016 12:25 | #
Très interressant ! Tu as fais un vrai travail de recherche, bien joué. Maintenant je comprend comment ça fonctionne derière tout ça.
C'est interressant que tu aies pris pour exemple la fonction Sleep(), ton analyse justifie les propos que tu tenais concernant ma lib de gestion du clavier qui s'utilise avec des Sleep(). En fait oui sleep et vraiment pourri
(ps petit coquille avec le mot desassembleur au 3.3 )
Citer : Posté le 20/10/2016 13:25 | #
Merci ! J'ai eu le temps de bien digérer la méthode depuis que TeamFX m'a expliqué ça pour la première fois sur Casiopeia
Effectivement, la fonction Sleep() est un bon exemple parce qu'elle est à la fois très simple et très moche. J'ai de la chance d'avoir pu disposer de cet exemple
(corrigé, merci)
Citer : Posté le 11/12/2018 21:03 | #
Merci pour ce tutoriel de qualité j'ai appris beaucoup de choses <3
Seulement j'ai un petit souci, j'aimerais déassembler des syscalls (histoire de mieux comprendre le fonctionnement de la calto).J'arrive à déassembler des programme simple, mais impossible de trouver la table des syscalls. Je suppose que ça se trouve dans l'image de l'os, mais impossible de le d'assembler
J'ai essayé avec un .fls et un .bin mais rien ne fait j'ai toujours la même erreur:
file format not recognized
La commande que je fais:
sh3eb-elf-objdump -m sh3 -d test.elf -D OS_205_E.bin > test.s
Citer : Posté le 11/12/2018 21:04 | #
C'est dans l'OS, mais le .bin tout entier n'est pas forcément au format elf, il y a par exemple un entête qui n'est pas dans le format elf.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 11/12/2018 21:07 | #
Je t'ai pourtant mis dans le chat l'option -b binary à cet effet !
Citer : Posté le 12/12/2018 09:44 | #
Je t'ai pourtant mis dans le chat l'option -b binary à cet effet !
Ma dyslexie me joue des tours visiblement, j'avais fait:
sh3eb-elf-objdump -m sh3 -d binary -D OS_205_E.bin > test.s
donc -d au lieu de -b, c'est pour ça que ça fonctionnait pas
Merci
Ajouté le 10/02/2019 à 17:54 :
Actuellement j'essaie de déassembler le syscall 0x117. Seulement voila, je me trouve un peu perdu sur certain point du code. ( )
Ce qui me pose problème c'est la différence entre jsr et jmp. La doc me dit que jsr "sauvegarde pr" puis saute a l'adresse donnée alors que jmp ne fait que sauter à l'address sans toucher à rien.
Je sais que pr signifie Procedure Register mais impossible de comprendre son utilité... et du coup quel avantage on a à utiliser jsr plutôt que jmp.
Citer : Posté le 10/02/2019 17:55 | #
pr est le registre qui dit à quel endroit il faut retourner quand on appelle rts. C'est-à-dire, où continuer une fois la fonction actuelle terminée.
Donc, jmp saute comme si tu avais fait un bra, un bt ou un autre saut normal, tandis que jsr saute dans une sous-routine ; ça fait un appel de fonction. Le code reprend après le jsr une fois que la sous-fonction aura exécuté rts.
Citer : Posté le 10/02/2019 18:04 | #
Bon j'aimerais bien lire, mais je dois d'abord apprendre le langage d'assemblage...
Citer : Posté le 10/02/2019 18:10 | #
Commence ici : https://www.planet-casio.com/Fr/forums/topic12345-1-[Tutoriel]-Initiation-a-l-assembleur-SuperH.html